/**
 * 用户相关API
 * @description 用户信息管理、设置等接口
 */

import { get, post, put } from '@/utils/modules/request'
import { API_BASE_URL } from '@/config'

/**
 * 获取用户个人信息
 * @returns {Promise} 用户信息
 */
export const getMeInfo = () => post('/user/getMeInfo')

/**
 * 获取我的信息（包含推送状态等）
 * @returns {Promise} 我的详细信息
 */
export const getMyInfo = () => post('/home/myinfo')

/**
 * 修改密码
 * @param {Object} data - 修改密码数据
 * @param {string} data.oldPassword - 旧密码
 * @param {string} data.newPassword - 新密码
 * @returns {Promise} 修改结果
 */
export const changePassword = (data) => post('/user/changePassword', data)

/**
 * 保存昵称
 * @param {string} nickname - 新昵称
 * @returns {Promise} 保存结果
 */
export const saveNickName = (nickname) => post('/user/saveInfo', { nickname })

/**
 * 保存头像
 * @param {string} avatar - 头像URL
 * @returns {Promise} 保存结果
 */
export const saveHeadImg = (avatar) => post('/user/saveInfo', { avatar })

/**
 * 保存推送状态
 * @param {string} pushState - 推送状态
 * @returns {Promise} 保存结果
 */
export const savePushState = (pushState) => post('/user/saveInfo', { pushState })

/**
 * 获取推送状态
 * @returns {Promise} 推送状态
 */
export const getPushState = () => get('/user/pushState')

/**
 * 设置单个推送状态
 * @param {string} state - 推送状态值
 * @returns {Promise} 设置结果
 */
export const postPushState = (state) => post(`/user/pushState/${state}`)

/**
 * 批量更新推送状态
 * @param {string} stateStr - 推送状态字符串（逗号分隔）
 * @returns {Promise} 更新结果
 */
export const putPushStateBatch = (stateStr) => put(`/user/update/pushStateBatch/${stateStr}`)

/**
 * 根据UID获取昵称
 * @param {string} uid - 用户ID
 * @returns {Promise} 昵称信息
 */
export const getNickName = (uid) => post('/user/findNickByUid', { uid })

/**
 * 上传图片
 * @param {File} file - 图片文件
 * @returns {Promise} 上传结果
 */
export const uploadImg = (file) => {
  const formData = new FormData()
  formData.append('file', file)
  formData.append('filename', file.name)
  formData.append('type', 'app')
  return post('/upload_img', formData)
}

/**
 * 获取上传URL
 * @returns {string} 上传地址
 */
export const uploadUrl = () => '/upload_img'

/**
 * 重置应用密钥
 * @returns {Promise} 重置结果
 */
export const resetAppsecret = () => post('/home/resetAppsecret')
/**
 * 获取等级介绍
 * @returns {Promise} 等级介绍数据
 */
export const levelIntro = () => get('/user/levelIntro')

/**
 * 获取邀请汇总信息
 * @returns {Promise} 邀请汇总数据
 * @description 返回的数据包含：
 *  - invitedCount: 邀请总数
 *  - reachLevelId: 达到的等级ID列表
 *  - reachLevelName: 达到的等级名称列表
 *  - rewardAmount: 奖励金额
 */
export const getInviteSummary = () => get('/user/getInviteSummary')

/**
 * 更新用户信息
 * @param {Object} data - 用户信息数据
 * @param {string} data.nickname - 昵称（可选）
 * @param {string} data.gender - 性别（可选，'MALE'/'FEMALE'/'UNKNOWN'）
 * @param {string} data.avatarUrl - 头像URL（可选）
 * @returns {Promise} 更新结果
 */
export const updateUserInfo = (data) => post('/user/updateUserInfo', data)

/**
 * 上传头像
 * @param {string} filePath - 本地文件路径
 * @returns {Promise} 上传结果，包含图片URL
 */
export const uploadAvatar = (filePath) => {
  return new Promise((resolve, reject) => {
    const token = uni.getStorageSync('auth_token')
    console.log(token);
    
    uni.uploadFile({
      url: `${API_BASE_URL}/user/uploadAvatar`,
      filePath: filePath,
      name: 'file',
      header: {
        'Authorization': `Bearer ${token}`,
      },
      success: (res) => {  
        if (res.statusCode === 200) {
          try {
            const data = JSON.parse(res.data)
            console.log(data);
            
            if (data.code === 200) {
              resolve(data)
            } else {
              reject(data.message || '上传失败')
            }
          } catch (error) {
            reject('解析响应数据失败')
          }
        } else {
          reject(`上传失败，状态码：${res.statusCode}`)
        }
      },
      fail: (error) => {
        reject(error.errMsg || '上传失败')
      }
    })
  })
}

/**
 * 获取用户消息信息
 * @returns {Promise} 用户消息信息，包含头像等
 */
export const getUserMsg = () => get('/user/userMsg')

/**
 * 获取邀请链接
 * @returns {Promise} 邀请信息，包含邀请链接、邀请码、二维码base64等
 * @description 返回的数据包含：
 *  - url: 邀请链接
 *  - originUrl: 邀请原始链接
 *  - inviteCode: 邀请码
 *  - qrCode: 二维码base64
 *  - timestamp: 时间戳
 */
export const getInviteUrl = () => get('/user/getInviteUrl')

/**
 * 设置推送设置（除策略推送外的推送设置）
 * @param {Object} data - 推送设置数据
 * @param {string} data.type - 推送类型：'whaleTransfer'(大额转账)、'news'(快讯)、'economicData'(财经日历)
 * @param {boolean} data.enable - 是否开启
 * @param {number} [data.userId] - 用户ID（可选，用于admin）
 * @returns {Promise} 设置结果
 */
export const setUniPushSetting = (data) => post('/user/uniPushSetting', data)

/**
 * 获取推送设置列表（除策略推送外的推送设置）
 * @returns {Promise} 推送设置列表
 * @description 返回的数据结构：
 * {
 *   code: 200,
 *   message: "success",
 *   data: [
 *     {
 *       type: "whaleTransfer" | "news" | "economicData" | "sms" | "email" | "aiAnalyze",
 *       enable: true/false,
 *       bindTime: "绑定时间",
 *       updateTime: "最后修改时间",
 *       timestamp: 时间戳
 *     }
 *   ]
 * }
 */
export const getUniPushSettingList = () => get('/user/uniPushSettingList')

/**
 * 获取用户推送配置
 * @returns {Promise} 用户推送配置
 * @description 返回的数据结构：
 * {
 *   code: 200,
 *   message: "操作成功",
 *   data: {
 *     strategySmsPush: boolean,   // 策略短信推送
 *     strategyEmailPush: boolean, // 策略邮箱推送
 *   },
 *   timestamp: 时间戳
 * }
 */
export const getUserPushConfig = () => get('/strategy/getUserPushConfig')

/**
 * 注销账户
 * @returns {Promise} 注销结果
 * @description 永久删除用户账户，此操作不可恢复
 */
export const deleteAccount = () => get('/user/logOff')

/**
 * 获取充值配置信息
 * @returns {Promise} 充值配置数据
 * @description 返回的数据包含：
 *  - qrcode: 二维码图片URL或base64
 *  - address: 充值地址
 *  - network: 网络类型（如：Tron (TRC20)）
 *  - minAmount: 最小充值额（如：0.01 USDT）
 */
export const getRechargeConfigs = () => get('/user/getRechargeConfigs')

